package cliente;

import java.awt.Component;
import java.util.List;

import javax.swing.JOptionPane;
import javax.swing.table.AbstractTableModel;

import MyServer.IRepositorioPackage.resultadoBusqueda;

public class ModeloTablaBusqueda extends AbstractTableModel {

	private List data;
	private boolean corbaError = false;
	private ControladorConsultor controladorPadre = null;
	
	private Object[][] datos;
	
	public static final int COLUMNA_REPOSITORIO = 4; 
	public static final int COLUMNA_NOMBRE_FISICO = 5;
	public static final int COLUMNA_RUTA_FICHERO = 6;
	public static final int COLUMNAS_REALES = 7;
	
	public ModeloTablaBusqueda(List data, ControladorConsultor c)
	{
		this.data = data;
		this.controladorPadre = c;
		
		iniciarDatos();
	}
	
	public int getColumnCount()
	{
		return 4;
	}

	public int getRowCount()
	{
		return data.size();
	}

	public String getColumnName(int nColum)
	{
		String res = "";
		switch (nColum)
		{
			case 0:
				res = "Nombre";
			break;
			case 1:
				res = "Repositorio";
			break;
			case 2:
				res = "Comentarios";
			break;
			case 3:
				res = "Palabras claves";
			break;
			default:
				res =  super.getColumnName(nColum);
			break;
		}
		
		return res;	
	}

	public Object getValueAt(int fila, int columna)
	{
		Object res = "";
		if (fila >= 0 && fila < getRowCount() && columna >= 0 && columna < COLUMNAS_REALES)
			res = datos[fila][columna];
				
		return res;
	}
	
	private void iniciarDatos()
	{
		datos = new Object [getRowCount()][COLUMNAS_REALES];
		
		for (int fila = 0; fila< getRowCount();fila++)
			for(int columna = 0; columna < COLUMNAS_REALES;columna++)
				datos[fila][columna] = getValueAtDinamico(fila, columna); 
	}
	
	private Object getValueAtDinamico(int fila, int columna)
	{
		Object res = ""; // :-)

		if(!corbaError)
		{	try
			{
				if (fila >= 0 && fila < getRowCount() && columna >= 0 && columna < COLUMNAS_REALES)
				{
					resultadoBusqueda elemento = (resultadoBusqueda)data.get(fila);
					
					
					
					switch (columna)
					{
						case 0:
							res = elemento.documento;
						break;
						case 1:
							res= elemento.repositorio.nombre();
						break;
						case 2:
							res = elemento.comentario;
						break;
						case 3:
							String claves = "";
							for(int n = 0; n< elemento.claves.length;n++)
							{
									claves = claves + elemento.claves[n]+" ";
									res = claves;
							}
						break;
						case COLUMNA_REPOSITORIO://Columna no visible; devolver referencia.
							res = elemento.repositorio;
						break;
						case COLUMNA_NOMBRE_FISICO://Columna no visible; devolver referencia.
							String ruta = elemento.ruta;
							int n = ruta.length() -2;//-1 por el acceso a array y -1 porque no es un directorio.
							boolean fin = false;
							
							while (n>=0 && !fin)
							{
								char c = ruta.charAt(n); 
								if( c == '\\' || c == '/')
									fin = true;
								else
									n--;						
							}
							
							res = ruta.substring(n, ruta.length());
		
						break;
						case COLUMNA_RUTA_FICHERO:
							res = elemento.ruta;
						break;
						
					}//Fin Switch
		
				}
				else
					res = null;
			}//Fin try
			catch (org.omg.CORBA.SystemException e)
			{
				corbaError = true;
				controladorPadre.manejarErrorCorba();
			}
		
		}//Fin if !error
		return res;

	}

	
}
